package com.translation.assistant.data

import android.content.Context
import com.huawei.hms.mlsdk.translate.local.MLLocalTranslatorModel
import com.translation.assistant.callback.OnModelListener
import com.translation.assistant.data.bean.Language
import com.translation.assistant.manager.OfflineTranslatorManager
import java.util.HashSet

object OfflineConstant {
    val ALL_LANGUAGES_MAP by lazy {
        LanguageInformation.ZH.getAllLanguagesMap()
    }
    val ALL_CODES by lazy {
        LanguageInformation.ZH.getAllCodes()
    }

    fun getLanguageByCode(code: String): Language {
        val language = ALL_LANGUAGES_MAP[code]
        return language?:Language(code, "", "", "")
    }
}

/**
 * 离线翻译支持的语种
 * @param code 语种code 下载离线翻译包
 * @param des 语种名称
 * @param short 语种简称
 * @param mapping 语种映射 HuDunLanguage的translateCode
 */
enum class LanguageInformation(val code: String, val des: String, val short: String, val mapping: String) {
    AR("ar", "阿拉伯语", "العربية", "ar"),
    DA("da", "丹麦语", "Dansk", "da"),
    DE("de", "德语", "Deutsch", "de"),
    EN("en", "英语", "English", "en"),
    ES("es", "西班牙语", "Español", "es"),
    FI("fi", "芬兰语", "Suomi", "fi"),
    FR("fr", "法语", "Français", "fr"),
    IT("it", "意大利语", "Italiano", "it"),
    JA("ja", "日语", "日本語", "ja"),
    KO("ko", "韩语", "한국어", "ko"),
    PL("pl", "波兰语", "Polski", "pl"),
    PT("pt", "葡萄牙语", "Português", "pt"),
    RU("ru", "俄语", "русский", "ru"),
    SV("sv", "瑞典语", "Svenska", "sv"),
    TH("th", "泰语", "ไทย", "th"),
    TR("tr", "土耳其语", "Türkçe", "tr"),
    ZH("zh", "中文", "中文简体", "zh"),
    //ZH_HK("zh-HK", "中文繁体", "中文繁体", "cht"),
    MS("ms", "马来西亚语", "Bahasa Melayu", "ms"),
    NO("no", "挪威语", "Norsk", "no"),
    VI("vi", "越南语", "Tiếng Việt", "vi"),
    CS("cs", "捷克语", "čeština", "cs"),
    EL("el", "希腊语", "Ελληνικά", "el"),
    HE("he", "希伯来语", "עברית", "he"),
    HI("hi", "印地语", "हिन्दी", "hi"),
    ID("id", "印尼语", "Bahasa Indonesia", "id"),
    RO("ro", "罗马尼亚语", "Română", "ro"),
    SR("sr", "塞尔维亚语", "Српски", "sr"),
    TL("tl", "菲律宾语", "Filipino", "fil"),
    KM("km", "高棉语", "ភាសាខ្មែរ", "km"),
    MY("my", "缅甸语", "မြန်မာ", "my"),
    TA("ta", "泰米尔语", "தமிழ்", "ta"),
    HU("hu", "匈牙利语", "Magyar", "hu"),
    NL("nl", "荷兰语", "Nederlands", "nl"),
    FA("fa", "波斯语", "فارسی", "fa"),
    SK("sk", "斯洛伐克语", "Slovenčina", "sk"),
    ET("et", "爱沙尼亚语", "Eesti", "et"),
    LV("lv", "拉脱维亚语", "Latviešu", "lv"),
    BG("bg", "保加利亚语", "Български", "bg"),
    HR("hr", "克罗地亚语", "Hrvatski", "hr"),
    UK("uk", "乌克兰语", "Українська", "uk"),
    CA("ca", "加泰罗尼亚语", "Català", "ca"),
    SL("sl", "斯洛文尼亚语", "Slovenščina", "sl"),
    BN("bn", "孟加拉语", "বাংলা", "bn"),
    //AF("af", "南非荷兰语", "Afrikaans", "af"),
    MT("mt", "马耳他语", "Malti", "mt"),
    MK("mk", "马其顿语", "Македонски", "mk"),
    IS("is", "冰岛语", "Íslenska", "is"),
    UR("ur", "乌尔都语", "اردو", "ur"),
    BS("bs", "波斯尼亚语", "Bosanski", "bs"),
    MR("mr", "马拉地语", "मराठी", "mr"),
    //GU("gu", "古吉拉特语", "ગુજરાતી", "gu"),
    PA("pa", "旁遮普语", "ਪੰਜਾਬੀ", "pa"),
    TE("te", "泰卢固语", "తెలుగు", "te"),
    MG("mg", "马尔加什语", "Malagasy", "mg"),
    //SW("sw", "斯瓦希里语", "Kiswahili", "sw"),
    //SQ("sq", "阿尔巴尼亚语", "Shqiptar", "sq"),
    //CY("cy", "威尔士语", "Cymraeg", "cy"),
    //GA("ga", "爱尔兰语", "Gaeilge", "ga"),
    //HT("ht", "海地克里奥尔语", "Kreyòl Ayisyen", "ht"),
    //LT("lt", "立陶宛语", "Lietuvių", "lt"),
    KA("ka", "格鲁吉亚语", "ქართული", "jy"),
    ;


    internal fun getAllLanguages(): List<Language> {
        val list = mutableListOf<Language>()
        values().forEach {
            list.add(Language(it.code, it.des, it.short, it.mapping))
        }
        return list
    }

    internal fun getAllCodes(): Set<String> {
        val list = HashSet<String>()
        values().forEach {
            list.add(it.code)
        }
        return list
    }

    internal fun getAllLanguagesMap(): HashMap<String, Language> {
        val map = HashMap<String, Language>()
        values().forEach {
            map[it.code] = Language(it.code, it.des, it.short, it.mapping)
        }
        return map
    }
}